package com.goodlearning.gloriamobile.commons;

import com.goodlearning.gloriamobile.R;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Handler;

/**
 * 스레드와 핸들러의 순차적 작업진행을 위한 클래스
 * @author yh
 *
 */
public class SyncTaskManager extends Thread{
	
	/**
	 * 핸들러에서 실행될 작업
	 * @author yh
	 */
	public interface HandlerTask{
		/**
		 * @param rtnObj  스레드에서 처리되어 넘어온 객체
		 */
		public void startHandlerTask(Object rtnObj);
	}
	
	
	/**
	 * 스레드에서 실행될 작업 (UI스레드 핸들링 금지!) 
	 * @author yh
	 *
	 */
	public interface ThreadTask{
		/**
		 * @return 핸들러에 넘길 객체
		 */
		public Object startLogicTask();
	}
	
	
	
	private static final int FINISH = 0;
	
	private Context context;
	private ProgressDialog pd;
	private ThreadTask threadTask;
	
	private HandlerTask handlerTask;
	
	private Object rtnObj;

	private Handler handler = new Handler(){
		@Override
		public void handleMessage(android.os.Message msg) {
			if(msg.what == FINISH){
				try {
					if(pd != null){
						pd.dismiss();
					}
				} catch (Exception e) {
				}
				if(handlerTask != null){
					handlerTask.startHandlerTask(rtnObj);
				}
				
			}
		};
	};
	
	/**
	 * 스레드작업 완료후 반환객체를 핸들러작업의 인자로 넣어준다.
	 * @param context
	 * @param threadTask	스레드 작업
	 * @param handlerTask	
	 */
	public SyncTaskManager(Context context, ThreadTask threadTask, HandlerTask handlerTask) {
		this.context = context;
		this.threadTask = threadTask;
		this.handlerTask = handlerTask;
	}

	@Override
	public void run() {
		super.run();
		rtnObj = threadTask == null ? null :  threadTask.startLogicTask();
		handler.sendEmptyMessage(FINISH);
	}
	
	@Override
	public synchronized void start() {
		super.start();
		pd = ProgressDialog.show(context, "", "",true,false);
		pd.getWindow().setContentView(R.layout.progressbar);
	}
	
	public synchronized void start(boolean showProgressDialog) {
		super.start();
		if(showProgressDialog){
			pd = ProgressDialog.show(context, "", "",true,false);
			pd.getWindow().setContentView(R.layout.progressbar);
		}
		
	}
	
	public synchronized void start(String title , String msg) {
		super.start();
		pd = ProgressDialog.show(context, title, msg,true,false);
	}
	
	public synchronized void start(String title , String msg, boolean showProgressDialog) {
		super.start();
		if(showProgressDialog){
			pd = ProgressDialog.show(context, title, msg,true,false);
		}
		
	}
}